module sw.wiki.wikicommands;
/**
 * wikiに関するコマンド
 */
version(Wiki):
import nazo.http, nazo.xhtml, std.uri, std.string;
import sw.commands, sw.parser, sw.wiki.pagelist, sw.siteconfig, sw.mode, sw.modelist, sw.utils;

class WikiCommands:Commands{
  const static string prefix="wiki";
  string value(SiteConfig* cfg,string name,string[] args,Cmd* cmd,uint hierarchy,string path){
    //* [wiki:list] Wikiページの一覧を表示
    //* [wiki:list basepath] Wikiページの一覧を表示
    if(name=="list"&&args.length>=0&&args.length<=1){
      string content;
      foreach(string li;new PageList){
        assert(li.length);
        if(args.length==0||li.length>args[0].length+1&&li[0..args[0].length+1]==args[0]~"/")
          content~="<li><a href=\""~genURI(cfg, li, path)~"\">"~Escape.text(args.length==0?li:li[args[0].length+1..$])~"</a></li>";
      }
      return "<ul>"~content~"</ul>";
    }
    //* [wiki:ref page] Wikiページへのリンク
    //* [wiki:ref label,page] Wikiページへのリンク
    //* [wiki:ref label,page,section] Wikiページへのリンク
    if(name=="ref"){
      if(args.length==1)return "<a href=\""~genURI(cfg, ArgConv.unescape(args[0]),path)~(top==Type.Wiki?"":genURISep(cfg)~"mode=wiki:")~"\">"~args[0] ~"</a>";
      if(args.length==2)return "<a href=\""~genURI(cfg, ArgConv.unescape(args[1]),path)~(top==Type.Wiki?"":genURISep(cfg)~"mode=wiki:")~"\">"~args[0] ~"</a>";
      if(args.length==3)return "<a href=\""~genURI(cfg, ArgConv.unescape(args[1]),path)~(top==Type.Wiki?"":genURISep(cfg)~"mode=wiki:")~"#id_"~ArgConv.getID(args[2])~"\">"~args[0] ~"</a>";
    }
    //* [wiki:refid section] ページ内へのリンク
    if(name=="ref"){
      if(args.length==1)return "<a href=\"#id_"~ArgConv.getID(args[0])~"\">"~args[0] ~"</a>";
    }
    return "Error: Invalid Command or Args or Prefix("~name~":"~.toString(args.length)~")";
  }
}
